package org.shj.jvm;


public class ClassLoading {

	public static void main(String[] args) {
		/**
		 * 被动使用类字段演示一：  
		 *     通过子类引用父类的静态字段，不会导致子类初始化
		 */
		//System.out.println(SubClass.value); //子类的 static 块不会被调用 
		
		/**
		 * 被动使用类字段演示二：
		 *     通过数组定义来引用类，不会触发此类的初始化 
		 */
		//SuperClass[] array = new SuperClass[10]; // SuperClass 的静态块没被调用
		
		/**
		 * 被动使用类字段演示三：
		 *     常量在编译阶段会存入调用类的常量池中，本质上并没有直接引用 到定义常量的类，因此不会触发定义常量的类的初始化 
		 */
		System.out.println(ConstClass.HELLO); // ConstClass 的静态块没被调用
	}
}

class SuperClass{
	static{
		System.out.println("Super class static block");
	}
	
	public static int value = 32;
}

class SubClass extends SuperClass{
	static{
		System.out.println("Sub class static block");
	}
}

class ConstClass{
	static{
		System.out.println("ConstClass init");
	}
	public static final String HELLO = "hello";
}
